import sum.kern.Stift;
import sum.kern.Bildschirm;

public class Kugel{
    Stift hatStift;
    Bildschirm kenntBildschirm;

    Kugel [] dieAnderenKugeln = new Kugel[10];
    int kugelIndex = 0;

    int zRadius;
    double zGeschwindigkeit; // Standardgeschwindigkeit
    double xGeschwindigkeit; // Ultrageschwindigkeit

    public Kugel(double pAnfangH, double pAnfangV, double pGeschwindigkeit, int pRichtung)
    {
        zRadius = 5;
        zGeschwindigkeit = pGeschwindigkeit;
        xGeschwindigkeit = pGeschwindigkeit;
        hatStift = new Stift();
        hatStift.bewegeBis(pAnfangH, pAnfangV);
        hatStift.dreheBis(pRichtung);
    }

    public void gibFrei()
    {
        hatStift.gibFrei();
    }

    public void merke(Bildschirm pBildschirm)
    {
        kenntBildschirm = pBildschirm;
    }

    public void bewege()
    {
        if(xGeschwindigkeit != zGeschwindigkeit){
            zGeschwindigkeit *= 0.9999;
        }
        this.loesche();
        hatStift.bewegeUm(zGeschwindigkeit);
        this.zeichne();
        if (this.hPosition() > kenntBildschirm.breite())
        {
            this.setzeRichtung(180 - this.richtung());
        }

        if (this.hPosition() < 0)
        {
            this.setzeRichtung(180 - this.richtung());
        }

        if (this.vPosition() > kenntBildschirm.hoehe())
        {
            this.setzeRichtung(360 - this.richtung());
        }

        if (this.vPosition() < 0)
        {
            this.setzeRichtung(360 - this.richtung());
        }

        if(this.dieAnderenKugeln.length != 0){
            for(int i = 0; i < this.dieAnderenKugeln.length-1; i++){
                if(((this.dieAnderenKugeln[i].hPosition() - this.hPosition()) <= zRadius+10 && (this.dieAnderenKugeln[i].hPosition() - this.hPosition()) >= -zRadius-10)
                && ((this.dieAnderenKugeln[i].vPosition() - this.vPosition()) <= zRadius+10 && (this.dieAnderenKugeln[i].vPosition() - this.vPosition()) >= -zRadius-10)){
                    this.setzeRichtung(70 + this.richtung());
                    if(this.dieAnderenKugeln[i].getType() == 'p'){
                        //System.out.println("Kollision mit Pulsierkugel " + this.dieAnderenKugeln[i].getRadius() + " Geschw.: "+zGeschwindigkeit);
                        if(this.dieAnderenKugeln[i].isWachsend() == true){
                            zGeschwindigkeit += zGeschwindigkeit/5;
                        }else{
                            zGeschwindigkeit -= zGeschwindigkeit/5;
                        }
                    }
                }
            }
        }

    }

    public void zeichne()
    {
        hatStift.zeichneKreis(zRadius);
    }

    public void loesche()
    {
        hatStift.radiere();
        this.zeichne();
        hatStift.normal();
    }

    public double hPosition()
    {
        return hatStift.hPosition();
    }

    public double vPosition()
    {
        return hatStift.vPosition();
    }

    public void setzeRichtung(double pWinkel)
    {
        hatStift.dreheBis(pWinkel);
    }

    public double richtung()
    {
        return hatStift.winkel();
    }

    public void kennenlernen(Kugel dieAndereKugel){
        this.dieAnderenKugeln[this.kugelIndex++] = dieAndereKugel;
    }

    public char getType(){
        return 'k';
    }

    public boolean isWachsend(){
        return false;
    }
}